export default {
	/** 
	 * 跳转页面
	 * @example toPage('home/home')
	 */
	toPage(path, flag = 1) {
		if (flag == 1) uni.navigateTo({
			url: `/pages/${path}`
		});
		else if (flag == 2) uni.navigateTo({
			url: `/pages-sub/${path}`
		});
	},
	/** 
	 * 跳转Tab导航栏
	 */
	toTab(path) {
		if (flag == 1) uni.switchTab({
			url: `/pages/${path}`
		});
		else if (flag == 2) uni.switchTab({
			url: `/pages-sub/${path}`
		});
	},
	/** 
	 * 跳转到页面 -> 关闭当前页面
	 */
	redirectTo(path) {
		if (flag == 1) uni.redirectTo({
			url: `/pages/${path}`
		});
		else if (flag == 2) uni.redirectTo({
			url: `/pages-sub/${path}`
		});

	},
	/** 
	 * 跳转到页面 -> 关闭所有页面
	 */
	reLaunchTo(path) {
		if (flag == 1) uni.reLaunch({
			url: `/pages/${path}`
		});
		else if (flag == 2) uni.reLaunch({
			url: `/pages-sub/${path}`
		});

	},

	/**
	 * @description 获取当前页面栈
	 */
	prePage() {
		var pages = getCurrentPages() // 获取栈实例
		let currentRoute = pages[pages.length - 1];
		return currentRoute;
	},

	/** 
	 * @description 提示
	 * @param {String} title 文案--最多显示7个
	 * @param {String} icon success，loading，none，error
	 */
	toast(title, icon = 'none', callback = () => {}, options = {
		duration: 1500
	}) {
		uni.showToast({
			title: title || '',
			icon: icon,
			mask: (options && options.mask) || true, // 透明蒙层
			// #ifdef MP-WEIXIN
			duration: (options && options.duration) || 2000,
			image: (options && options.image) || '',
			// #endif
			success: () => setTimeout(callback, options.duration)
		});
	},

	/**
	 * @description 加载框
	 * @param { Object } options 
	 */
	loading(title, callback = () => {}, options = {
		flag: true, //  开启加载框||关闭加载框
		delay: 1500 // 延迟执行
	}) {
		if (options.flag) {
			uni.showLoading({
				title: title,
				mask: true, // 透明蒙层
				success: () => setTimeout(callback, options.delay)
			});
		} else uni.hideLoading();
	},


	/**
	 * 模态弹窗
	 * @param { Function } callback 成功回调
	 * @param { Function } err 失败回调
	 */
	showModal(title, callback = () => {}, err = () => {}, options = {
		title: '提示',
		cancelText: '取消', // 取消按钮的文字自定义
		confirmText: '确认', // 确认按钮的文字自定义
		cancelColor: '#000', // 取消字体的颜色
		confirmColor: '', // 删除字体的颜色
		editable: false, // 是否显示输入框
	}) {
		uni.showModal({
			title: options.title,
			content: title, // 提示文字
			cancelText: options.cancelText,
			confirmText: options.confirmText,
			confirmColor: options.confirmColor,
			cancelColor: options.cancelColor,
			editable: options.editable,
			success: function(res) {
				// console.log('res', res);
				if (res.confirm) callback()
				else err()
			},
		})
	},


	/** 
	 * 打电话
	 * @param {String} phoneNumber - 数字字符串
	 */
	callPhone(phoneNumber = '') {
		let num = phoneNumber.toString()
		uni.makePhoneCall({
			phoneNumber: num,
			fail(err) {
				console.log('makePhoneCall出错', err)
			},
		});
	},

	/** 复制到剪贴板  
	 * @example @longpress="tools.longpress($event,'复制的内容')"
	 * @param {Event,String}  
	 */
	longpress(event, txt) { // 长按一秒 + 定时器.5秒
		const pressTime = event.timeStamp; // 获取长按开始的时间戳。无效
		setTimeout(() => {
			uni.setClipboardData({
				data: txt,
				showToast: true,
				success: function() {
					uni.showToast({
						title: '复制成功',
						icon: 'none'
					});
				},
				fail: function() {
					uni.showToast({
						title: '复制失败',
						icon: 'none'
					});
				}
			});
		}, 500);
	},


	/**
	 * 日期格式化
	 * @example formatDate(date, "YYYY-mm-dd HH:MM:SS");
	 * @param { Number } date 时间戳（秒）
	 * @param { String } fmt 格式 "YYYY-mm-dd HH-MM:SS"
	 * @returns 2023-12-07 22:17:54
	 */
	formateDate(date, fmt) {
		let ret = null;
		let type = fmt || "YYYY-mm-dd";
		let timestr = new Date(date * 1000);
		const opt = {
			"Y+": timestr.getFullYear().toString(), // 年
			"m+": (timestr.getMonth() + 1).toString(), // 月
			"d+": timestr.getDate().toString(), // 日
			"H+": timestr.getHours().toString(), // 时
			"M+": timestr.getMinutes().toString(), // 分
			"S+": timestr.getSeconds().toString() // 秒
			// 有其他格式化字符需求可以继续添加，必须转化成字符串
		};
		for (let k in opt) {
			// 匹配成功返回数组，否则返回null
			ret = new RegExp("(" + k + ")").exec(type);
			if (ret) {
				// padStart('总字符串长度','填补字符串')：往前补全字符串
				type = type.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")));
			};
		};
		return type;
	},

	/**
	 * 提取日期中的年月日 
	 * @example formatWeed('2023-12-07 22:17:54')
	 * @return 2023-12-07
	 */
	formatWeed(date) {
		return date.slice(0, 10)
	},

	/** 
	 * 秒钟格式化
	 * @example format(121)
	 * @param {Number} t - 秒
	 * @return {Object}  {d: "00", h: "00", m: "02", s: "01"} 天，时，分，秒
	 */
	format(t) {
		let format = {
			d: '00',
			h: '00',
			m: '00',
			s: '00'
		};
		if (t > 0) {
			let d = Math.floor(t / 86400);
			let h = Math.floor((t / 3600) % 24);
			let m = Math.floor((t / 60) % 60);
			let s = Math.floor(t % 60);
			format.d = d < 10 ? '0' + d : d;
			format.h = h < 10 ? '0' + h : h;
			format.m = m < 10 ? '0' + m : m;
			format.s = s < 10 ? '0' + s : s;
		}
		return format;
	},

	/**
	 * 格式化用户名
	 * @example formatName('宋宋宋宋')
	 * @param { String } name
	 * @returns { String } 宋**宋
	 */
	formatName(name) {
		name = name.trim();
		let newStr;
		if (name.length && name.length < 3) newStr = name.substr(0, 1) + "*";
		else if (name.length > 2) {
			let nchar = "";
			for (let i = 0; i < name.length - 2; i++) {
				nchar += "*";
			}
			newStr = name.substr(0, 1) + nchar + name.substr(-1, 1);
		} else newStr = name;
		return newStr;
	},

	/**
	 * 格式化手机号码
	 * @example formatMobile('17377770000')
	 * @param { String } mobile
	 * @returns { String }  173****0000
	 */
	formatMobile(mobile) {
		mobile = mobile.trim();
		let newStr;
		if (mobile.length && mobile.length == 11) {
			let nchar = "";
			for (let i = 0, len = mobile.length - 7; i < len; i++) {
				nchar += "*";
			}
			newStr = mobile.substr(0, 3) + nchar + mobile.substr(-4);
		} else {
			newStr = mobile;
		}
		return newStr;
	},

	/**
	 * 格式化富文本字体和样式
	 *str 富文本
	 */
	resetRichtextStyle(str) {
		/* 匹配img标签   [^>]：除了>以外的字符  match：匹配处理的结果。   capture 数值：字符索引 */
		let newContent = str.replace(/<img[^>]*>/gi, function(match, capture) {
			// console.log('match',match,capture);
			/* 去掉img标签中的 style="" */
			match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
			match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
			match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
			return match;
		});

		// newContent= newContent.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi,function(match, capture){
		// 	match = match.replace(/src="[^"]+"/gi, 'src="' + that.imgUrl + capture + '"').replace(/src='[^']+'/gi, 'src="' + that.imgUrl + capture + '"');
		// 	return match;
		// });
		// newContent = newContent.replace(/\<img/gi,
		// 	'<img class="richtext-img" style="margin: 15px auto; display: block;width: 100%;height: auto;"');
		// newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) {
		// 	match = match.replace(/width:[^;]+;/gi, 'max-width:100%;');
		// 	return match;
		// });
		// newContent = newContent.replace(/<br[^>]*\/>/gi, '');
		// newContent = newContent.replace(/<p[^>]*>/gi, function(match, capture) {
		// 	match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
		// 	return match;
		// });
		// newContent = newContent.replace(/\<p/gi,
		// 	'<p class="richtext-p" style="font-size: 14px;line-height: 26px;color: #fff;font-weight: 400; text-indent: 2em;"'
		// 	);
		return newContent;
	},

	/** 
	 * 下载(兼容微信小程序、安卓APP)
	 * @example 【注意：如果没在小程序中配置request合法域名，请勾选不效验合法域名】
	 * downloadWX('http://127.0.0.1/song/测试文件.docx')
	 * http://43.136.96.235:2023/public/image/1.jpg 
	 * http://43.136.96.235:2023/song/测试文件.docx
	 */
	downloadFile(downloadUrl = 'http://ceshi.xiaoshengqifu.com/image/head.jpg') {
		let this_ = this
		let suffixArr = ['jpg', 'png', 'jpeg', 'gif']
		let suffix = downloadUrl.split('.')
		let suffixStr = suffix[suffix.length - 1].toLowerCase() // 获取后缀名

		uni.showLoading({
			title: '下载中...'
		});

		if (suffixArr.includes(suffixStr)) { // 下载图片到相册
			//#ifdef MP-WEIXIN 
			uni.getSetting({ // 获取权限
				success: (res) => {
					if (res.authSetting['scope.writePhotosAlbum']) {
						console.log('已经授权');
						// 用户已经授权
						uni.downloadFile({
							url: downloadUrl,
							success: (res) => {
								if (res.statusCode === 200) {
									uni.saveImageToPhotosAlbum({
										filePath: res.tempFilePath,
										success: function() {
											uni.hideLoading();
											uni.showToast({
												title: "已保存到相册",
												icon: "none"
											});
										},
										fail: () => uni.hideLoading()
									});
								}
							}
						})
					} else {
						/* 用户未授权，发起授权请求 */
						// 第一次运行时弹出对话框，后面根据第一次的结果走对应回调
						uni.authorize({
							scope: 'scope.writePhotosAlbum',
							success: () => {
								console.log('授权成功')
								uni.hideLoading();

								// 用户已经授权
								uni.downloadFile({
									url: downloadUrl,
									success: (res) => {
										if (res.statusCode === 200) {
											uni.saveImageToPhotosAlbum({
												filePath: res.tempFilePath,
												success: function() {
													uni.hideLoading();
													uni.showToast({
														title: "已保存到相册",
														icon: "none"
													});
												},
												fail: () => uni
													.hideLoading()
											});
										}
									}
								})
							},
							fail: () => {
								// 授权失败，引导用户手动授权
								uni.showModal({
									title: '授权提示',
									content: '需打开相册权限，是否前往授权？',
									success: (res) => {
										if (res.confirm) {
											// 手动设置授权。注意该API需要通过用户点击才能触发
											uni.openSetting({
												success(setting) {
													// console.log(setting);
													if (setting.authSetting[
															'scope.writePhotosAlbum'
														]) this_.toast(
														'权限已开启，再次保存图片即可成功'
													)
													else this_.toast(
														'您关闭了相册权限，将影响部分功能的使用'
													)
												}
											})
										}
									}
								});
							}
						});
					}
				}
			});
			//#endif

			//#ifdef APP-PLUS
			uni.downloadFile({
				url: downloadUrl,
				success: (res) => {
					if (res.statusCode === 200) {
						uni.saveImageToPhotosAlbum({
							filePath: res.tempFilePath,
							success: function() {
								uni.hideLoading();
								uni.showToast({
									title: "已保存到相册",
									icon: "none"
								});
							},
							fail: () => uni.hideLoading()
						});
					}
				}
			})
			//#endif
		} else { // 下载文件
			uni.downloadFile({
				url: downloadUrl,
				success: (res) => {
					if (res.statusCode === 200) {
						uni.hideLoading();

						//文件保存到本地 【uni.saveFile:以后会弃用】    
						// uni.getFileSystemManager().saveFile
						uni.saveFile({
							tempFilePath: res.tempFilePath, //临时路径
							success: function(res) {
								uni.showToast({
									icon: 'success',
									mask: true,
									title: '下载成功',
									duration: 2000,
								});
								//自动打开文档查看
								setTimeout(() => {
									var filePath = res.savedFilePath;
									uni.openDocument({ //新开页面打开文档，支持格式：doc, xls, ppt, pdf, docx, xlsx, pptx。
										filePath: filePath,
										showMenu: true,
										success: function(res) {
											console.log('打开文档成功');
										}
									});
								}, 2000)
							}
						});
					}
				},
				fail: (err) => {
					console.log(err);
					uni.showToast({
						icon: 'none',
						mask: true,
						title: '文件下载失败',
					});
				},
			})
		}
	},

	/**
	 * @description H5+下载App
	 * @param downloadUrl:App下载链接
	 * @param progressCallBack:下载进度回调
	 */
	downloadApp(downloadUrl = '', progressCallBack = () => {}) {
		return new Promise((resolve, reject) => {
			// 创建下载任务。plus.downloader.createDownload控制台打印不出，
			const downloadTask = uni.downloadFile({
				url: downloadUrl,
				success: (download) => {
					resolve(download.tempFilePath)
				},
				fail: (err) => {
					reject('fail')
					uni.showToast({
						title: '下载失败',
						duration: 1500,
						icon: "none"
					});
				}
			})
			// 进度条
			downloadTask.onProgressUpdate((res) => {
				// console.log('下载进度' + res.progress);
				// console.log('已经下载的数据长度' + res.totalBytesWritten);
				// console.log('预期需要下载的数据总长度' + res.totalBytesExpectedToWrite);
				progressCallBack(res.progress)
				// if (res.progress >= 10) { // 满足测试条件，取消下载任务。
				// 	downloadTask.abort();
				// }
			});


			// const downloadTask = plus.downloader.createDownload(downloadUrl, {
			// 	method: "GET"
			// }, (task, status) => {
			// 	console.log('status', task, status)
			// 	// return
			// 	if (status == 200) { //下载成功
			// 		resolve(task)
			// 	} else {
			// 		reject('fail')
			// 		uni.showToast({
			// 			title: '下载失败',
			// 			duration: 1500,
			// 			icon: "none"
			// 		});
			// 	}
			// }) 
			// //监听下载过程
			// downloadTask.addEventListener("statechanged", (task, status) => {
			// 	switch (task.state) {
			// 		case 1: // 开始  
			// 			break;
			// 		case 2: //已连接到服务器  
			// 			break;
			// 		case 3: // 已接收到数据  
			// 			let hasProgress = task.totalSize && task.totalSize > 0 //是否能获取到App大小
			// 			if (hasProgress) {
			// 				let current = parseInt(100 * task.downloadedSize / task.totalSize); //获取下载进度百分比
			// 				progressCallBack(current)
			// 			}
			// 			break;
			// 		case 4: // 下载完成       
			// 			break;
			// 	}
			// });
			// //开始执行下载
			// downloadTask.start();
		})
	},

	/**
	 * @description H5+安装App
	 */
	installApp(fileName, callBack = () => {}) {
		//注册广播监听app安装情况
		this.onInstallListening(callBack);

		// 将本地URL路径转换成平台绝对路径
		let url = plus.io.convertLocalFileSystemURL(fileName)
		// 开始安装
		plus.runtime.install(url, {
			force: true // 强制安装,不进行版本号的校验
		}, () => {
			// 成功跳转到安装界面
			plus.runtime.restart(); //更新成功启动
		}, function(error) {
			uni.showToast({
				title: '安装失败',
				duration: 1500,
				icon: "none"
			});
			uni.showToast({
				title: "更新失败，将跳转下载页面",
				icon: "none",
				duration: 1000
			})
			setTimeout(function() {
				plus.runtime.openURL(appUrl);
			}, 2000)
		})
	},

	/**
	 * @description 注册广播监听APP是否安装成功
	 * @param callBack:安装成功回调函数
	 */
	onInstallListening(callBack = () => {}) {
		// 获取activity实例对象
		let mainActivity = plus.android.runtimeMainActivity();
		// 生成广播接收器
		let receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
			onReceive: (context, intent) => { //接收广播回调 
				// console.log('触发广播',context, intent);
				plus.android.importClass(intent);
				mainActivity.unregisterReceiver(receiver); //取消监听
				callBack()
			}
		});
		let IntentFilter = plus.android.importClass('android.content.IntentFilter');
		let Intent = plus.android.importClass('android.content.Intent');
		let filter = new IntentFilter();
		filter.addAction(Intent.ACTION_PACKAGE_ADDED); //监听APP安装     
		filter.addDataScheme("package");
		mainActivity.registerReceiver(receiver, filter); //注册广播
	}
}